/* 
    - 封装一个设置cookie的函数
        
        + 参数：
            1.key       必填
            2.value     选填，默认值 为 '',数据类型只能为字符串
            3.expires   过期时间，选填，数据类型为数字，表示这个cookie的过期时间，为会话级别  这个数字表示分钟 10  10分钟过期 

        + 返回值：
            1.如果只是简单执行某一个功能的时候 那么这个函数不需要返回值
            2.但是如果这个函数 执行某一个某一个功能需要得到一个结果 需要添加返回值
            
            function setCookie(){
    
            }
*/

function setCookie(key, value, expires) {
    if (!key) {
        throw new Error("key是必填的参数");
    };

    // 如果value有值,并且数据是字符串的时候,才表示这个数据是value的值
    let t = Object.prototype.toString.call(value);
    let val = value && t == "[object String]" ? value : "";

    // 如果value 值,并且数据是数字的时候,表示这个数据是 expires 的值
    // 如果本身expires,值存在 那么就用这个值当成过期时间
    // 如果expires,不存在 并且value的值为数字的时候 那么就把value当成expires设置

    expires = expires ? expires : t == "[object Number]" ? value : "";

    // 如果有expires需要设置过期时间
    if (expires) {
        let date = new Date();
        let time = date.getTime() - 8 * 60 * 60 * 1000 + expires * 60 * 1000;
        date.setTime(time);

        // path=/  设置cookie的目录 表示设置在项目的根目录下面，这个项目的所有文件都可以访问这个cookie
        // 如果不设置path ，那么表示这个cookie设置在这个文件所在的文件夹下面，那么就只能这个文件夹下面的文件可以访问这个cookie
        document.cookie = `${key}=${val};expires=${date};path=/`;

        return;
    }

    document.cookie = `${key}=${val};path=/`;
}

/* 
    document.cookie 
    login=老谢; age=38
    参数：
        +   key: 选填，表示你要获取哪个cookie的值
    返回值：有返回值
        +   如果有key 那么就把这个key对应的属性值返回
        +   如果没有key 的时候 那么就把所有的cookie以对象的形式返回

    function getCookie(key){
    
    }
   getCookie('login')
*/

function getCookie(key) {
    // 先获取所有的cookie
    let res = document.cookie;
    // 定义一个对象存储数据
    let obj = {};
    let arr = res.split("; ");

    arr.forEach(item => {
    
        let [key, value] = item.split("=");

        obj[key] = value;
    })
    // 如果key有值 就把key对应的属性值返回
    if (key) {
        return obj[key];
    }
    // 否则就把整个cookie以对象的形式返回
    return obj;
}

